Ad Widget

Collapse

Snmp, ÷èñëà ñ ïëàâàþùåé òî÷êîé

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • alexzagr
    Member
    • Sep 2012
    • 49

    #1

    Snmp, ÷èñëà ñ ïëàâàþùåé òî÷êîé

    Железяка отдает по snmp такое:
    Code:
    SNMPv2-SMI::enterprises.7465.20.2.9.4.4.5.1.2.1.7.1.3 = STRING: "3.9e-07"
    В zabbix создал элемент данных с типом "Числовой (с плавающей точкой)".

    В итоге в логах такое:
    Code:
    2450:20130924:123123.523 item [Tangram M6:in1ber] became not supported: Received value [9.9e-08] is not suitable for value type [Numeric (float)]
    Нормально принимает только когда ноль приходит.

    Проблема не похожа на какую-то узкоспецифичную, но 15 минут погуглив ничего похожего на решение не нашел.

    UPDATE: кракозябры поправил на человеческий текст.
    Last edited by alexzagr; 24-09-2013, 16:30.
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    кракозябры не читал, но ответ понятен и так - нельзя, не будет, надо патчить код zabbix_server

    Comment

    • alexzagr
      Member
      • Sep 2012
      • 49

      #3
      Действительно кракозябры если захожу с другого браузера.

      А что значит патчить: есть патч или ждать пока сделают? у меня zabbix server 2.0.5

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Проблему можно решить через внешние_проверки.
        Т.е. написать скрипт, который сделает опрос OID и вернёт значение как число.

        Comment

        • alexzagr
          Member
          • Sep 2012
          • 49

          #5
          Через внешнюю проверку конечно можно. Жаль, думал zabbix поймет такой формат данных.

          Comment

          • Jimson
            Senior Member
            • Jan 2008
            • 1327

            #6

            не так давно завели реквест на доработку, возможно скоро сделают
            но если нужно быстрее, то на сколько я понимаю сложность патча там ограничится 1-2 строчками

            Comment

            • alexzagr
              Member
              • Sep 2012
              • 49

              #7
              Originally posted by Jimson
              https://support.zabbix.com/browse/ZBXNEXT-78
              не так давно завели реквест на доработку, возможно скоро сделают
              Created:2009 Jun 15 18:10 - действительно, буквально на днях создали .

              Originally posted by Jimson
              но если нужно быстрее, то на сколько я понимаю сложность патча там ограничится 1-2 строчками
              Исходники на Си не осилю, пока не критично, эти данные кое-как скушал кактус. Если сильно припечет сделаю через скрипт.

              Comment

              • alexzagr
                Member
                • Sep 2012
                • 49

                #8
                Поковырял исходники, нашел часть проблемы
                src/libs/zbxcommon/misc.c
                функция is_double проверяет вещественные числа, сделал небольшой патч:
                Code:
                --- misc.c.old  2012-10-03 17:41:35.000000000 +0300
                +++ misc.c      2013-10-01 14:35:58.000000000 +0300
                @@ -1322,20 +1322,27 @@
                 {
                        size_t  i, len;
                        char    dot = 0;
                +       char    e = 0;
                
                        for (i = 0; ' ' == str[i] && '\0' != str[i]; i++)       /* trim left spaces */
                                ;
                
                        for (len = 0; '\0' != str[i]; i++, len++)
                        {
                -               /* negative number? */
                -               if ('-' == str[i] && 0 == i)
                -                       continue;
                +               /* negative number? */
                +               if ('-' == str[i] && (0 == i || (('E' == str[i-1] || 'e' == str[i-1]) && i > 0)))
                +                       continue;
                +
                +               if (('E' == str[i] || 'e' == str[i]) && i > 0 && e == 0)
                +               {
                +                       e = 1;
                +                       continue;
                +               }
                
                                if (0 != isdigit(str[i]))
                                        continue;
                
                -               if ('.' == str[i] && 0 == dot)
                +               if ('.' == str[i] && 0 == dot && e == 0)
                                {
                                        dot = 1;
                                        continue;
                Пересобрал сервер, проверил и ... облом: числа со степенью -7 превращяются в 1, -8 и меньше - в 0. Я примерно понимаю почему так, но патчить дальше самому уже проблематично.

                Comment

                • Jimson
                  Senior Member
                  • Jan 2008
                  • 1327

                  #9
                  Zbxnext-78 реализовали

                  Comment

                  • alexzagr
                    Member
                    • Sep 2012
                    • 49

                    #10
                    Originally posted by Jimson
                    Zbxnext-78 реализовали
                    Не может быть . Fix version не указали, надеюсь в 2.0.10 появится. Спасибо за новость.

                    Comment

                    Working...